#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:taotieren


"""
    rpi.gpio 需要 root 权限，板上运行需要使用
    sudo python adc_test.py
    ADC(模数转换器)
        MCP3008 八通道 ADC IC， 10KΩ 谐调电位器
        安装是芯片缺口朝上
        电位器 一端接 3.3V 一端接地，这样就允许中间连接可以设置为 0V 到 3.3V
        实验前，确保开启 SPI，并且安装好了 Python 的 SPI 库 （pip install spidev）

    MCP3008 是 10 比特 的 ADC，每次读取的时候会返回一个介于 0 到 1023 之间的数字
        测试程序将会把它转化为电压值，方法是将读取的数值乘以电压范围（3.3V）然后除以 1024.
    支持和光敏电阻一起搭配使用

"""

""" 非树莓派环境下可以用 rpi.gpio_def 代替 rpi.gpio 来进行程序调试和验证 """
import spidev, time

spi = spidev.SpiDev()
spi.open(0, 0)


def analog_read(channel):
    r = spi.xfer2([1, (8 + channel) << 4, 0])
    adc_out = ((r[1] & 3) << 8) + r[2]
    return adc_out


while True:
    reading = analog_read(0)
    voltage = reading * 3.3 / 1024
    print("Reading = %d\tVoltage=%f" % (reading, voltage))
    time.sleep(1)
